package util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {
    //第一个参数表示要获取的字符串
    // 第二个参数表示是否是全拼
    // 比如针对“基础语法”这样的字符串来说，如果是第二个参数为true，得到jichuyufa这个结果 如果第二个参数为false 那么得到jcyf这个结果
    // 此处针对多音字不做过多考虑  要想得出更精确的“多音字”结果 可以找一些“分词”库
    public static String get(String src, boolean fullSpell){
        //trim的效果是去掉字符串两侧的空白字符
        if (src == null || src.trim().length() == 0){
            return null;
        }
        //针对Pinyin4j 稍作配置 让它输出的yu这个拼音 能够使用v表示
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);
        //遍历字符串的每个字符，针对每个字符分别进行转换，把转换得到的拼音的结果，拼接到StringBuilder中
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < src.length(); i++) {
            char ch = src.charAt(i);
            //对单个字符进行转换
            String[] temp = null;
            try {
                temp = PinyinHelper.toHanyuPinyinStringArray(ch,format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            if (temp == null||temp.length==0){
                //如果结果是空的话，说明转换失败了
                // 如果输入的字符没有汉语拼音，就会转换失败
                // 保留原始字符，直接把原始字符加入到结果中
                stringBuilder.append(ch);
            } else if (fullSpell) {
                //拼音结果非空，且获取完整全拼
                stringBuilder.append(temp[0]);
            }else {
                //拼音结果非空，且获取拼音首字母
                stringBuilder.append(temp[0].charAt(0));
            }
        }
        return stringBuilder.toString();
    }
}
